package TextEditor;

/**
 * @Author mao
 * @Date 2025/11/8
 * @Description 编辑文件
 */
import java.io.*;
import java.util.Scanner;

public class TextEditor {
    public static void main(String[] args) {
        System.out.println("  =====欢迎使用文件处理工具=====");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入完整的文件路径（包含文件扩展名）");
        String sourcePath = scanner.nextLine().trim();//自动处理空格

        //确认源文件存在
        File sourceFile = new File(sourcePath);
        if (!sourceFile.exists()) {
            System.err.println("源文件不存在！");
            scanner.close();
            return;
        }

        System.out.println("请选择以下任意操作...");
        System.out.println("A 复制-粘贴图片\t\t-字节流");
        System.out.println("B 剪切-粘贴文本文件\t-字符流");
        System.out.println("请输入操作对应的字母（请注意大小写）...");
        String choice = scanner.nextLine().trim();
        System.out.println("请输入要保存的文件路径（包含完整文件名）...");
        String destPath = scanner.nextLine().trim();

        try {
            if (choice.equals("A")) {
                //复制（只复制不删除源文件）
                copyBinaryFile(sourceFile, new File(destPath));
                System.out.println("图片复制成功！");
            } else if (choice.equals("B")) {
                //剪切（复制后删除源文件）
                copyTextFile(sourceFile, new File(destPath));
                if (sourceFile.delete()) {
                    System.out.println("文本文件剪切成功！");
                } else {
                    System.err.println("警告：无法删除原文件，但已复制。");
                }
            } else {
                System.err.println("无效的操作选项！");
            }
        } catch (IOException e) {
            System.err.println("操作失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 使用字节流复制二进制文件
     */
    private static void copyBinaryFile(File source, File dest) throws IOException {
        //自动创建目标目录
        dest.getParentFile().mkdirs();

        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(dest)) {

            byte[] buffer = new byte[8000];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
        }
    }

    /**
     * 使用字符流复制文本文件
     */
    private static void copyTextFile(File source, File dest) throws IOException {
        dest.getParentFile().mkdirs();

        //再try的括号中包裹能实现资源自动释放
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(source), "UTF-8"));
             BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dest), "UTF-8"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }
        }
    }
}
